home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_46 / sb.h < prev    next >
C/C++ Source or Header  |  1995-01-01  |  5KB  |  152 lines

  1. /* Include file for Soundblaster library */
  2.  
  3. /* Defines for Soundblaster and Soundblaster Pro IO address */
  4. #define LEFT_FM_STATUS      0x00    /* Pro only */
  5. #define LEFT_FM_ADDRESS     0x00    /* Pro only */
  6. #define LEFT_FM_DATA        0x01    /* Pro only */
  7. #define RIGHT_FM_STATUS     0x02    /* Pro only */
  8. #define RIGHT_FM_ADDRESS    0x02    /* Pro only */
  9. #define RIGHT_FM_DATA       0x03    /* Pro only */
  10. #define MIXER_ADDRESS       0x04    /* Pro only */
  11. #define MIXER_DATA          0x05    /* Pro only */
  12. #define DSP_RESET           0x06
  13. #define FM_STATUS           0x08
  14. #define FM_ADDRESS          0x08
  15. #define FM_DATA             0x09
  16. #define DSP_READ_DATA       0x0A
  17. #define DSP_WRITE_DATA      0x0C
  18. #define DSP_WRITE_STATUS    0x0C
  19. #define DSP_DATA_AVAIL      0x0E
  20. #define CD_ROM_DATA         0x10    /* Pro only */
  21. #define CD_ROM_STATUS       0x11    /* Pro only */
  22. #define CD_ROM_RESET        0x12    /* Pro only */
  23. #define CD_ROM_ENABLE       0x13    /* Pro only */
  24.  
  25. #define ADLIB_FM_STATUS     0x388
  26. #define ADLIB_FM_ADDRESS    0x388
  27. #define ADLIB_FM_DATA       0x389
  28.  
  29. /* Defines for 8237 DMA Controller IO addresses */
  30. #define DMA         0x00
  31. #define CH0_BASE    DMA+0
  32. #define CH0_COUNT   DMA+1
  33. #define CH1_BASE    DMA+2
  34. #define CH1_COUNT   DMA+3
  35. #define CH2_BASE    DMA+4
  36. #define CH2_COUNT   DMA+5
  37. #define CH3_BASE    DMA+6
  38. #define CH3_COUNT   DMA+7
  39. #define DMA_STATUS  DMA+8
  40. #define DMA_CMD     DMA+8
  41. #define DMA_REQUEST DMA+9
  42. #define DMA_MASK    DMA+10
  43. #define DMA_MODE    DMA+11
  44. #define DMA_FF      DMA+12
  45. #define DMA_TMP     DMA+13
  46. #define DMA_CLEAR   DMA+13
  47. #define DMA_CLRMSK  DMA+14
  48. #define DMA_WRMSK   DMA+15
  49. #define DMAPAGE     0x80
  50.  
  51. /* Types of Soundblaster Cards */
  52. #define SB15    1
  53. #define SBPro    2
  54. #define SB20    3
  55.  
  56. /* DSP Commands */
  57. #define DIRECT_8_BIT_DAC    0x10
  58. #define DMA_8_BIT_DAC        0x14
  59. #define DMA_2_BIT_DAC        0x16
  60. #define DMA_2_BIT_REF_DAC   0x17
  61. #define DIRECT_ADC        0x20
  62. #define DMA_ADC         0x24
  63. #define MIDI_READ_POLL        0x30
  64. #define MIDI_READ_IRQ        0x31
  65. #define MIDI_WRITE_POLL     0x38
  66. #define TIME_CONSTANT        0x40
  67. #define DMA_4_BIT_DAC        0x74
  68. #define DMA_4_BIT_REF_DAC   0x75
  69. #define DMA_26_BIT_DAC        0x76
  70. #define DMA_26_BIT_REF_DAC  0x77
  71. #define HALT_DMA        0xD0
  72. #define CONTINUE_DMA        0xD4
  73. #define SPEAKER_ON        0xD1
  74. #define SPEAKER_OFF        0xD3
  75. #define DSP_ID            0xE0
  76. #define DSP_VER         0xE1
  77. #define MDAC1            0x61
  78. #define MDAC2            0x62
  79. #define MDAC3            0x63
  80. #define MDAC4            0x64
  81. #define MDAC5            0x65
  82. #define MDAC6            0x66
  83. #define MDAC7            0x67
  84.  
  85. enum { RECORD = 0, PLAY = 1 };       /* For the 'direction' argument */
  86.  
  87. /* High-speed parameters */
  88. #define MAX_LO_REC 12048
  89. #define MAX_LO_PLAY 22222
  90. #define SET_HS_SIZE 0x48
  91. #define HS_DAC 0x91
  92. #define HS_ADC 0x99
  93.  
  94. /* Functions that are in the library */
  95. int Sb_Init(void);
  96. int Sb_Get_Params(void);
  97. unsigned Sb_Sample_Rate(unsigned rate, int direction);
  98. void Sb_Voice(int state);
  99. void Sb_Voice_DMA(char far *data, unsigned dlen, int stereo, int direction);
  100. void Sb_Init_Voice_DMA(void interrupt (*handler)(void));
  101. void Sb_DeInit_Voice_DMA(void);
  102. int Sb_DMA_Complete(void);
  103. void Sb_Halt_DMA(void);
  104. void Sb_Continue_DMA(void);
  105.  
  106. /* DMA routines */
  107. int dma_setup(int Channel,char far *Buffer,unsigned Length,int Dir);
  108. int prevent_dma(int Channel);
  109. int allow_dma(int Channel);
  110. unsigned dma_count(int Channel);
  111. unsigned dma_addr(int Channel);
  112.  
  113. extern int dma_errno;
  114. extern char far *dma_errlist[];
  115.  
  116. /* Card parameters */
  117. extern unsigned SbIOaddr;
  118. extern unsigned SbIRQ;
  119. extern unsigned SbDMAchan;
  120. extern int    SbType;
  121.  
  122.  
  123. /* Define a useful macro for writing data to the DAC */
  124. #define writedac(x) { while(inportb(SbIOaddr+DSP_WRITE_STATUS) & 0x80); \
  125.                       outportb(SbIOaddr+DSP_WRITE_DATA,(x)); }
  126.  
  127. /* Write a byte to the SB Pro mixer chip */
  128. #define writemixer(x,y) { outportb(SbIOaddr+MIXER_ADDRESS,(x)); \
  129.               outportb(SbIOaddr+MIXER_DATA,(y)); }
  130.  
  131. /* FM Instrument definition */
  132. typedef struct {
  133.     unsigned char SoundCharacteristic[2];
  134.     unsigned char Level[2];
  135.     unsigned char AttackDecay[2];
  136.     unsigned char SustainRelease[2];
  137.     unsigned char WaveSelect[2];
  138.     unsigned char Feedback;
  139.     unsigned char filler[5];
  140. } FM_Instrument;
  141.  
  142. /* FM sound routines */
  143. void Sb_FM_Reset(void);
  144. void Sb_FM_Key_Off(int voice);
  145. void Sb_FM_Key_On(int voice, int freq, int octave);
  146. void Sb_FM_Voice_Volume(int voice, int vol);
  147. void Sb_FM_Set_Voice(int voice_num, FM_Instrument *ins);
  148.  
  149. /* MIDI routines */
  150. int Sb_Read_MIDI(void);
  151. void Sb_Write_MIDI(int data);
  152.